home *** CD-ROM | disk | FTP | other *** search
- PC Scheme Version 3.03 Release Notes
-
- This document describes the changes in PC Scheme since version 2.0.
-
-
- PC Scheme 3.0 features
- ----------------------
-
- Version 3.0 contains bug fixes, significant enhancements over 2.0, and
- has been upgraded to the latest Scheme Standard as defined by the "Revised
- Revised Revised (R^3) Report on the Algorithmic Language Scheme." A copy
- of that report is now included in the 3.0 manuals.
-
- Also included in this document is a number of features which are not
- documented in the Language Reference Manual nor the User's Guide, but
- which may be useful for programming.
-
- R^3 Report Changes
- ------------------
-
- 1. #T and #F now replace #!TRUE and #!FALSE. #!TRUE and #!FALSE are
- still supported in 3.0, however their use is discouraged and they
- may not be supported in future versions.
-
- 2. Quasiquote expressions may now be nested and are defined to work
- with vectors. The keywords UNQUOTE (",") and UNQUOTE-SPLICING (",@")
- are also now recognized.
-
- 3. The defining form (DEFINE (<variable> <formals>) <body>) no longer
- expands into a NAMED-LAMBDA as specified in the Report. To support
- code written under earlier versions of Scheme, the global variable
- PCS-INTEGRATE-DEFINE may be set non-nil to force the expansion, or
- nil to conform to the Report. Its default value is #T.
-
- 4. BOOLEAN? is a new procedure which indicates if an object is either
- #T or #F (ie., (BOOLEAN? #T) => #T).
-
- 5. PROCEDURE? is a new procedure which indicates if an object is a
- procedure (ie., (PROCEDURE? CAR) => #T).
-
- 6. The expression types NAMED-LAMBDA, REC, and SEQUENCE have been removed
- from the Report but will continue to be supported as extensions.
-
- 7. The following procedures have been removed from the report, however
- they will continue to be supported as extensions:
-
- APPEND!, STRING-NULL?, SUBSTRING-FILL!, SUBSTRING-MOVE-LEFT!,
- SUBSTRING-MOVE-RIGHT!, OBJECT-HASH, OBJECT-UNHASH, 1+, -1+.
-
- 8. The redundant procedure names <?, <=?, =?, >?, and >=? have been removed
- from the Report and will be supported in this release, however their use
- is discouraged and future versions may not support them.
-
- 9. The syntax #!NULL (for the empty list) has been removed from the report.
- Its usage is also discouraged and may not be supported in the future.
-
-
-
- Bug Fixes
- ---------
-
- 1. DEFINE has been corrected to bind a variable in the correct environment.
- Earlier versions of PCS could incorrectly rebind variables defined in
- parent environments, if the variable did not exist in the defining
- environment.
-
- 2. IMPLODE now flags an error if given a non-list object.
-
- 3. NUMBER->STRING has fixes to correct problems with the '(heur) format.
-
- 4. Shift/Break now correctly halts printing of circular lists.
-
- 5. INPUT-PORT? and OUTPUT-PORT? have been corrected to return '() after the
- port is closed.
-
- 6. Expanded Memory Scheme no longer requires the EMM page frame to be on a
- 64kb boundary.
-
- 7. Drawing a line from x1,y1 to x2,y2 and later erasing it in the
- direction x2,y2 to x1,y1 now correctly resets all the intermediate
- pixels.
-
-
-
- Enhancements/New Features
- -------------------------
-
- 1. Graphics has undergone significant changes which are documented in the
- User's Guide and Language Reference Manual. Following is a synopsis of
- the changes:
-
- * The %GRAPHICS primitives now accept a seventh argument to specify
- an exclusive-or when drawing pixels or lines.
-
- * A new %GRAPHICS function has been included which allows you to set
- a clipping rectangle which subsequent drawing functions use. All
- %GRAPHICS drawing routines now use the clipping rectangle.
-
- * New graphics functions:
- (GET-PEN-COLOR) - returns the pen's color.
- (GET-PEN-POSITION) - returns the pen's position.
- (POINT-COLOR) - returns a point's color value.
- (SET-CLIPPING-RECTANGLE! x1 y1 x2 y2) - set clipping rectangle.
-
- * Modes 14 and 16 for the EGA are now supported.
-
- * CLEAR-GRAPHICS no longer automatically switches into mode 4, but
- remains in the current video mode. SET-VIDEO-MODE! will automati-
- cally do a CLEAR-GRAPHICS after changing modes.
-
- 2. EDWIN contains several changes to help in its performance and flexibility.
-
- * The file EDWIN.INI will be loaded if it exists within the PCS
- directory. EDWIN.INI may contain code to customize the display,
- or remap the keyboard. See EDWIN.INI for examples.
-
- * Edwin now loads into its own environment, EDWIN-ENVIRONMENT. This
- reduces the number of variables in the USER-GLOBAL-ENVIRONMENT and
- allows EDWIN to be removed via the new REMOVE-EDWIN command.
-
- * REMOVE-EDWIN is a procedure of no arguments which may now be called
- to remove references to EDWIN so that it will disappear upon the
- next garbage collection. Remember that if EDWIN was loaded from
- SCHEME-TOP-LEVEL, the history will still contain pointers to EDWIN,
- prohibiting it from being garbage collected. In that case, you must
- perform a SCHEME-RESET prior to the garbage collect to remove all
- references to EDWIN.
-
- * EDWIN will now query the user upon exiting Scheme, if its buffers
- have been modified but not written back out to the file.
-
- * The time required to load files into EDWIN's buffer has been
- significantly reduced.
-
- 3. PC Scheme now contains an External Language Interface (XLI) to support
- the calling of subroutines written in other languages. XLI has been
- tested to work with assembly, C and Pascal. See the chapter "External
- Language Interface (XLI)" in the User's Guide for more information.
-
- 4. Transcendental functions have been rewritten using XLI and
- use the 8087/80287 numeric coprocessor when it is available.
- Accuracy is true double-precision and performance is significantly
- improved, even without the 8087. The complete source code of this
- XLI interface is included. Refer to the chapter "External Language
- Interface (XLI)" in the User's Guide for more information.
-
- 5. A semi-interpretive EVAL has been implemented. EVAL now works
- interpretively until it encounters a binding form (such as LAMBDA,
- LET, etc.), at which time the compiler will be invoked.
-
- 6. READ-LINE has been implemented as a primitive operation and will now echo
- to the screen when called to read from the console.
-
- 7. LIST-TAIL has been implemented as a primitive operation. Both LIST-REF
- and LIST-TAIL gain significant performance increases.
-
- 8. Random I/O is now supported via SET-FILE-POSITION! and GET-FILE-POSITION.
- See the description in the Language Reference Manual.
-
- 9. Binary file input and output is now supported via OPEN-BINARY-INPUT-FILE
- and OPEN-BINARY-OUTPUT-FILE procedures. See the description in the
- Language Reference Manual.
-
- 10. The non-essential procedure STRING->NUMBER from the R^3 Report is now
- included. See the description in the Language Reference Manual.
-
- 11. #\ESCAPE has been added as a system defined character.
-
- 12. Enhanced error handling is now available, and DOS I/O errors now trap
- to the inspector, with extended error information available. Reference
- the User's Guide under the chapter "DEBUGGING" for information on
- defining your own error handler via *USER-ERROR-HANDLER*.
-
- 13. New procedures EXPAND-MACRO-1, EXPAND-MACRO, and EXPAND. EXPAND-MACRO-1
- will expand the outer-level of some form once and return the expanded
- form, EXPAND-MACRO will repeatedly expand the outer-level form until it
- is no longer a macro, and EXPAND will expand the entire form (outer and
- inner level forms), returning an expansion.
-
- Example: (EXPAND-MACRO '(let ((a 1) (b 2)) (foo a b)))
-
- *** Note ***
- When expanding various forms with the above procedures, you may
- encounter references to primitive operations. These primitive oper-
- ations typically begin with one or more percent signs (%), are
- generally not available for direct use by the user, and may change
- in future versions of PC Scheme.
-
- 14. The random number generator can be reseeded using the RANDOMIZE
- function. See the description in the Language Reference Manual.
-
-
-
- Corrections to the Manuals
- --------------------------
-
- The following corrections to the User's Guide should be noted.
-
- 1. At the top of page 8-16, the request number to be used for the
- "swap" special service request was omitted. The bullet that reads:
-
- * swap
-
- should be replaced with:
-
- * swap (request number = 1)
-
- 2. On page C-1 the symbol "remap" is equated with interrupt 7fh.
- However, the comment just below it refers to interrupt 60h.
- The correct interrupt number is 7fh. Therefore, the comment that reads:
-
- ; This example uses the interrupt at 60h; refer to ...
-
- should be replaced with:
-
- ; This example uses the interrupt at 7fh; refer to ...
-
-
-
- Undocumented/Non-Standard Features
- ----------------------------------
-
- The following features are undocumented features which may or may not be
- supported in future releases. They certainly are not standard Scheme
- features and prohibit portability, but may be useful in some cases.
-
-
- 1. GRAPHICS-WINDOW is a function which may be useful in creating graphics
- windows. It is currently in an experimental stage, is not fully complete,
- and is subject to change. Still, it is useful in its current form, and
- you may try it out at your own risk.
-
- GRAPHICS-WINDOW is a "marker" function indicating that the next series
- of MIT graphics functions will execute relative to a specified window
- instead of the full screen. It takes one argument, a window object
- (a port), and returns a 2-list of 4-lists. The first list is the
- clipping rectangle for the window's interior using window-centered
- coordinates, expressed as (left top right bottom), for use by the MIT
- functions, and the second list is the same rectangle expressed in
- screen coordinates for use by %GRAPHICS. It changes the graphics
- state known by the MIT functions and sets the clipping rectangle to
- correspond to the window's interior so that further use of the MIT
- functions will execute relative to the window instead of the full screen.
- Aside from setting the clipping rectangle, there are no other effects
- on %GRAPHICS.
-
- After executing GRAPHICS-WINDOW on a window for the first time, a call
- to CLEAR-GRAPHICS should be issued to set the pen position and color
- and erase the graphics plane under the window (which may erase text
- too if they share the same plane). Further graphics commands are
- issued normally.
-
- To move from one graphics window to another, use GRAPHICS-WINDOW with
- the next window. Note that when you move to another window, the graphics
- state (window, pen color, and pen position) of the first window is
- forgotten. You will need to save it off if you want to come back and
- start up where you left off. The functions CURRENT-GRAPHICS-WINDOW,
- GET-PEN-COLOR, and GET-PEN-POSITION, executed before the switch, will
- give you this information.
-
- While executing relative to a window, CLEAR-GRAPHICS will not affect
- the entire screen. To reset CLEAR-GRAPHICS to its initial state
- where it does affect the entire screen, do (GRAPHICS-WINDOW 'SCREEN)
- followed by (CLEAR-GRAPHICS). Executing SET-VIDEO-MODE! any time will do
- this automatically. Note that (GRAPHICS-WINDOW 'SCREEN) is not the same
- as (GRAPHICS-WINDOW 'CONSOLE); although the console generally matches the
- screen, it doesn't have to--it's a window in its own right.
-
- 2. %LOGAND, %LOGIOR, %LOGXOR are procedures of two arguments and are used
- to perform the bitwise logical operations and, or, and xor. The
- arguments must be 15 bit integers.
-
- 3. UNBIND is a procedure which may be used to remove bindings from
- environments. The call to unbind is as follows:
-
- (UNBIND 'VAR ENV)
-
- Where : VAR is the variable you wish to remove
- ENV is any heap allocated environment, including the
- user-initial and user-global environments.
-
- Unbind can be useful in providing user-assisted memory management.
- If an object which is auto-loadable is unbound via the UNBIND
- procedure, it may later be auto-loaded again. Therefore, if you
- define autoload lists, you can maintain some control over what
- code you desire in memory.
-
- 4. Autoload information created from the function AUTOLOAD-FROM-FILE (see
- chapter titled "ADVANCED FEATURES" in User's Guide) is stored on a
- property list under the name PCS-AUTOLOAD-INFO. Scheme defines a number
- of autoload entries of its own, and any that you add will be consed
- onto the autoload list. You can see the autoload information by
- performing (GETPROP 'PCS-AUTOLOAD-INFO).
-
- The procedure AUTOLOAD-FROM-FILE also takes an optional third argument
- which indicates the environment that you want the file loaded into. For
- example
-
- (autoload-from-file "DEFS.FSL" '(foo bar baz) user-initial-environment)
-
- will load the file "DEFS.FSL" into the user-initial-environment whenever
- foo, bar, or baz is referenced. The optional environment argument can
- be any heap allocated environment. To add or delete entries from the
- autoload list just write your own functions to modify the list, however
- if you remove any of the compiler dependent files from the list, a
- reference to one of its functions will cause errors.
-
- The undocumented procedure REMOVE-AUTOLOAD-INFO may be used to remove
- information from the autoload list. REMOVE-AUTOLOAD-INFO takes one
- argument, the filename of the autoload entry you wish to remove, and
- then removes the autoload information from the list. This function,
- along with UNBIND can be used to help the user perform memory manage-
- ment.
-
- 5. MAKE-HASHED-ENVIRONMENT is a procedure of no arguments which creates
- an environment in the Scheme heap in the form of a hash table for
- better accessing. The hash table contains 211 entries; any time a
- variable is defined in that environment a hash key will be determined
- via an internal hash function to find the correct entry. This is
- identical to the user global and user initial environments. A hashed
- environment's parent is the user-initial-environment.
-
- A hashed environment will provide better access times than normal
- environments, given there are a lot of variables in the environment.
- However, there is certainly a space/time tradeoff to consider. The
- hashed environment contains much more overhead which will be wasted
- if you need only a handfull of variables.
-
- One advantage of the hashed environment, as with all environments,
- is that if you discard all references to the environment, it will
- be garbage collected and all the space may be reclaimed. This means
- that you must keep track of all variables or references which are
- exported to other environments. Also, if you define a macro within
- an environment, the macro definition holds a reference to the
- environment and will prohibit garbage collection of the environment.
- Macro definitions may be found under the property PCS*MACRO of the
- macro name declared.
-
- 6. While the 3.0 implementation of transcendental functions is much
- faster and more accurate and therefore to be preferred, the 2.0
- version had the advantage of being about half the size. If space is
- more important than speed or accuracy, you can do the following:
-
- 1. Invoke PC Scheme as usual, except put a minus sign in front
- of the .XLI control file name; this prevents XLI from
- loading NEWTRIG.EXE. For example:
-
- pcs (my.ini -my.xli) arg1 arg2
-
- 2. Inside PC Scheme, do:
- (eval '(load "oldpmath.fsl") user-global-environment)
- If your current directory is not the PC Scheme directory,
- you'll need to append the value of the system variable
- PCS-SYSDIR to the front of the filename. The LOAD must be
- inside the EVAL so that autoload references to pmath.fsl
- will be intercepted correctly.
-
- It is not absolutely necessary to do step 1 just to use oldpmath.fsl,
- but the space savings won't be realized without it. Also, step 2
- should be done soon upon entering PC Scheme, as various system
- functions, such as some Edwin commands, require the math functions
- (whether through XLI\pmath.fsl or through oldpmath.fsl) to be loaded.
-
- PC Scheme 3.02 features
- -----------------------
-
- The following bugs have been fixed.
-
- 1. There were several obscure bugs in the extended and expanded memory
- models of PC Scheme which have been corrected. Also, extended memory
- performance has been enhanced by about 25%.
-
- 2. PC Scheme 3.02 recognizes an IBM PS/2 Model 80. IBM has assigned
- a new machine-type number to it, which is reflected in the value
- of PCS-MACHINE-TYPE. More importantly, FREESP in extended memory
- PC Scheme now works correctly on the Model 80.
-
- 3. EQUAL? on ports no longer causes a type mismatch error.
-
- 4. There was a bug in determining the pathname of NEWTRIG.EXE when
- PC Scheme had been installed in the root directory. This usually
- showed itself when running PC Scheme from floppy disks.
-
- 5. In the form (SET! (ACCESS var env) value), there was a bug in which
- environment the "value" was placed if the "var" did not already exist.
-
- 6. DOS-CALL no longer depends on the COMSPEC environment variable
- being listed first in the DOS environment.
-
- 7. Line-lengths for binary files are now automatically set to zero
- so end-of-line sequences are suppressed.
-
- 8. XLI checks for its version number. PC Scheme 3.02 uses the same
- version number as 3.0. The error message is "[XLI] Version mismatch".
- Also, the XLI error message "[XLI] The function requested by XCALL is not
- available" now is followed by the name of the function that failed.
-
- 10. PC Scheme's definition of EQV? says "=" is used to compare numeric
- arguments. However, MEMV and ASSV, which are supposed to use EQV?
- for their equality predicates, were really using EQUAL?. "=" and
- EQUAL? return different results when two numeric arguments have
- different types, so the fix may cause a change of behavior in how
- MEMV and ASSV work.
-
- 11. Internal "getmem" errors no longer cause an abort to DOS.
- Instead, the system performs a SCHEME-RESET. The error generally
- appears during output of extremely large data structures when
- I/O buffer space is exhausted, but the data structures themselves
- remain intact, so this should be adequate recovery in most cases.
-
- 12. A bug in SCOOPS was making the environments in which instance
- variables got created be dependent on the order in which the
- classes were compiled.
-
- The following features are "new" to PC Scheme 3.02.
-
- 1. XLI can now receive error messages from external programs and drop into
- the Inspector displaying the error message.
-
- The external program reports an error as follows. It formats the
- parameter block with a string as return value, where the string is
- the error message. However, instead of using a return-value type of
- 2 (string), it should use a value of 10 (error-string). XLI will
- drop into the Inspector with the error message "[XLI] Error reported
- by external program" followed on the next line by the external
- program's error message (note the Inspector uses WRITE to display
- the message). The error is not restartable.
-
- If an external program using this error technique is run under
- PC Scheme 3.0, XLI reports the different error "[XLI] The return value
- of XCALL is invalid" and the external program's error message never
- appears.
-
- NEWTRIG.EXE has been reimplemented with this technique. Refer to
- the file XLI\TRIG_LC.C to examine the source code.
-
- 2. There are a couple more XLI source examples in the XLI directory.
- One is in assembly language, the other in C. One provides PC Scheme
- with sound capability, and the other demonstrates a way to run
- DOS-executable files without using DOS-CALL.
-
- 3. %GRAPHICS for EGA has been reimplemented to do direct screen writes.
- This gives a significant performance boost at the expense of generality,
- which may affect some EGA clones. Also, VGA modes 17 and 18 are now
- supported.
-
- PC Scheme 3.03 features
- -----------------------
-
- The following bugs have been fixed.
-
- 1. Random I/O has been fixed. If a file is opened with OPEN-EXTEND-FILE,
- one can perform both input from and output to that file.
-
- 2. An obscure garbage collection bug was fixed which envolved one defining
- their own top-level. If a user top-level has been defined instead of
- the Scheme-Top-level, and an out of memory encountered an error message
- occurred on the next garbage collect.
-
- 3. A garbage collection bug in extended memory was fixed. Compaction of
- list cells could sometimes cause problems.
-
- 4. A problem with DOS memory fragmentation was fixed. Upon returning from
- PC Scheme, all of memory was not being returned to DOS. This could some-
- times cause other programs to fail with "not enough memory" errors.
-
- The following new features have been added:
-
- 1. Support has been added for VGA mode 18.
-
-
- 2. One can now specify when garbage compaction should occur.
-
- (GC-GET-COMPACT-COUNT! number) - specifies that a compaction should
- occur after every "number" of gc's.
-
- (GC-GET-COMPACT-COUNT) - returns the current "number".